﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConceptsParser.SyntaxTree
{
    /// <summary>
    /// Интерфейс визитора по синтаксическому дереву
    /// </summary>
    public interface ISyntaxTreeVisitor
    {
        void Visit(ConceptsSyntaxTreeNode node);
        void Visit(ProgramNode node);
        void Visit(ProgramSectionNode node);
        void Visit(DeclarationNode node);
        void Visit(DirectiveNode node);
        void Visit(DefinitionNode node);
        void Visit(QualifiedNamespaceNode node);
        void Visit(TypeQualifierNode node);
        void Visit(IDTypeQualifierNode node);
        void Visit(ConceptReferenceQualifierNode node);
        void Visit(TypeArgumentNode node);
        void Visit(SimpleTypeArgumentNode node);
        void Visit(GenericTypeArgumentNode node);
        void Visit(UsingSectionNode node);
        void Visit(UsingDirectiveNode node);
        void Visit(ConceptsSectionNode node);
        void Visit(ConceptDefinitionNode node);
        void Visit(ConceptSignatureNode node);
        void Visit(ConceptBodyNode node);
        void Visit(ConceptReferenceNode node);
        void Visit(InnerConceptDeclarationNode node);
        void Visit(InnerConceptRequirementNode node);
        void Visit(InnerConceptAliasNode node);
        void Visit(NestedConceptRequirementNode node);
        void Visit(AssociatedTypeDeclarationNode node);
        void Visit(ConstraintOnTypeArgNode node);
        void Visit(TypeRequirementNode node);
        void Visit(ConceptAliasNode node);
        void Visit(TypeAliasNode node);
    }
}
